/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package entities;

import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author Felipe Duarte
 */
@Entity
@Table(name = "direccion")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Direccion.findAll", query = "SELECT d FROM Direccion d"),
    @NamedQuery(name = "Direccion.findByIdDireccion", query = "SELECT d FROM Direccion d WHERE d.idDireccion = :idDireccion"),
    @NamedQuery(name = "Direccion.findByNumeroViaDireccion", query = "SELECT d FROM Direccion d WHERE d.numeroViaDireccion = :numeroViaDireccion"),
    @NamedQuery(name = "Direccion.findByNombreViaDireccion", query = "SELECT d FROM Direccion d WHERE d.nombreViaDireccion = :nombreViaDireccion"),
    @NamedQuery(name = "Direccion.findByNumeroPlacaDireccion", query = "SELECT d FROM Direccion d WHERE d.numeroPlacaDireccion = :numeroPlacaDireccion")})
public class Direccion implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "ID_DIRECCION")
    private Integer idDireccion;
    @Size(max = 20)
    @Column(name = "NUMERO_VIA_DIRECCION")
    private String numeroViaDireccion;
    @Size(max = 20)
    @Column(name = "NOMBRE_VIA_DIRECCION")
    private String nombreViaDireccion;
    @Size(max = 10)
    @Column(name = "NUMERO_PLACA_DIRECCION")
    private String numeroPlacaDireccion;
    @JoinColumn(name = "ID_PREFIJO_4", referencedColumnName = "ID_PREFIJO")
    @ManyToOne(optional = true)
    private Prefijo idPrefijo4;
    @JoinColumn(name = "ID_PREFIJO_3", referencedColumnName = "ID_PREFIJO")
    @ManyToOne(optional = true)
    private Prefijo idPrefijo3;
    @JoinColumn(name = "ID_PREFIJO_2", referencedColumnName = "ID_PREFIJO")
    @ManyToOne(optional = true)
    private Prefijo idPrefijo2;
    @JoinColumn(name = "ID_PREFIJO_1", referencedColumnName = "ID_PREFIJO")
    @ManyToOne(optional = true)
    private Prefijo idPrefijo1;
    @JoinColumn(name = "DATO_COMPLEMENTARIO", referencedColumnName = "ID_DATO_COMPLEMENTARIO")
    @ManyToOne(optional = true)
    private DatoComplementario datoComplementario;
    @JoinColumn(name = "TIPO_VIA_ID_TIPO_VIA", referencedColumnName = "ID_TIPO_VIA")
    @ManyToOne(optional = false)
    private TipoVia tipoViaIdTipoVia;
    @OneToMany(mappedBy = "idDireccionPuntoEmergencia")
    private List<PuntoEmergencia> puntoEmergenciaList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "direccionIdDireccion")
    private List<Proveedor> proveedorList;

    public Direccion() {
    }

    public Direccion(Integer idDireccion) {
        this.idDireccion = idDireccion;
    }

    public Integer getIdDireccion() {
        return idDireccion;
    }

    public void setIdDireccion(Integer idDireccion) {
        this.idDireccion = idDireccion;
    }

    public String getNumeroViaDireccion() {
        return numeroViaDireccion;
    }

    public void setNumeroViaDireccion(String numeroViaDireccion) {
        this.numeroViaDireccion = numeroViaDireccion;
    }

    public String getNombreViaDireccion() {
        return nombreViaDireccion;
    }

    public void setNombreViaDireccion(String nombreViaDireccion) {
        this.nombreViaDireccion = nombreViaDireccion;
    }

    public String getNumeroPlacaDireccion() {
        return numeroPlacaDireccion;
    }

    public void setNumeroPlacaDireccion(String numeroPlacaDireccion) {
        this.numeroPlacaDireccion = numeroPlacaDireccion;
    }

       

    public Prefijo getIdPrefijo4() {
        return idPrefijo4;
    }

    public void setIdPrefijo4(Prefijo idPrefijo4) {
        this.idPrefijo4 = idPrefijo4;
    }

    public Prefijo getIdPrefijo3() {
        return idPrefijo3;
    }

    public void setIdPrefijo3(Prefijo idPrefijo3) {
        this.idPrefijo3 = idPrefijo3;
    }

    public Prefijo getIdPrefijo2() {
        return idPrefijo2;
    }

    public void setIdPrefijo2(Prefijo idPrefijo2) {
        this.idPrefijo2 = idPrefijo2;
    }

    public Prefijo getIdPrefijo1() {
        return idPrefijo1;
    }

    public void setIdPrefijo1(Prefijo idPrefijo1) {
        this.idPrefijo1 = idPrefijo1;
    }

    public DatoComplementario getDatoComplementario() {
        return datoComplementario;
    }

    public void setDatoComplementario(DatoComplementario datoComplementario) {
        this.datoComplementario = datoComplementario;
    }

    public TipoVia getTipoViaIdTipoVia() {
        return tipoViaIdTipoVia;
    }

    public void setTipoViaIdTipoVia(TipoVia tipoViaIdTipoVia) {
        this.tipoViaIdTipoVia = tipoViaIdTipoVia;
    }

    @XmlTransient
    public List<PuntoEmergencia> getPuntoEmergenciaList() {
        return puntoEmergenciaList;
    }

    public void setPuntoEmergenciaList(List<PuntoEmergencia> puntoEmergenciaList) {
        this.puntoEmergenciaList = puntoEmergenciaList;
    }

    @XmlTransient
    public List<Proveedor> getProveedorList() {
        return proveedorList;
    }

    public void setProveedorList(List<Proveedor> proveedorList) {
        this.proveedorList = proveedorList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idDireccion != null ? idDireccion.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Direccion)) {
            return false;
        }
        Direccion other = (Direccion) object;
        if ((this.idDireccion == null && other.idDireccion != null) || (this.idDireccion != null && !this.idDireccion.equals(other.idDireccion))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "entities.Direccion[ idDireccion=" + idDireccion + " ]";
    }
    
}
